package modelo;

import java.util.ArrayList;
import java.util.Collections;

public class ColaConPrioridad{
	private ArrayList<Estructura> elementos;
	
	/* Clase privada para utilizar una estructura tipo monticulos 
	 * para sacar el de menor distancia 
	 * */
	private class Estructura implements Comparable<Estructura>{
		private Usuario user;
		private int valorDistancia;
		
		public Estructura(Usuario user, int distancia){
			this.user = user;
			this.valorDistancia = distancia;
		}

		@Override
		public int compareTo(Estructura otro) {
			if (this.valorDistancia < otro.valorDistancia) return -1;
			return 1;
		}
	}
	
	public ColaConPrioridad(){
		this.elementos = new ArrayList<Estructura>();
	}
	
	/* Carga un usuario con su nuevo valor de distancia
	 * */
	public void adicionar(Usuario user, Integer distancia) {
		Estructura nuevoElemento = new Estructura(user, distancia);
		this.elementos.add(nuevoElemento);
	}
	
	/* Devuelve el usuario con menor distancia
	 * */
	public Usuario extraerMinimo(){
		Collections.sort(this.elementos);
		Usuario user = this.elementos.get(0).user;
		this.elementos.remove(0);
		return user;
	}
	
	/* Devuelve verdadero si la cola esta vacia
	 * */
	public boolean isEmpty() {
		return this.elementos.isEmpty();
	}
	

}
